#include<cstdio>
#include<unistd.h>
#include<pthread.h>
#include<vector>
using namespace std;
// void* task(void* arg){
//     const char* buffer = static_cast<const char*>(arg);
//     while(true){
//         printf("%s\n",buffer);
//         sleep(1);
//     }
//     return nullptr;
// }

// int main(){
// #define NUM 10
//     pthread_t array[NUM] ={0};
//     for(int i = 0 ; i < NUM;i++ ){
//         char buffer[1024];
//         snprintf(buffer,sizeof buffer,"thread: %d",i);
//         pthread_t tid = 0;
//         pthread_create(&tid,nullptr,task,buffer);
//         array[i] = tid;
//     }

//     for(int i = 0 ; i < NUM; i++){
//         pthread_join(array[i],nullptr);
//     }

//     return 0;
// }
//上面的代码是错误的，会导致每个线程都是从9开始访问，因为其传的是地址，而每次for都会更改地址指向内容，而且线程进入的速度不同，导致异常情况

__thread int g_val = 10;

void* task(void* arg){
    // const char* buffer = static_cast<const char*>(arg);
    // int cnt = 10;
    // while (cnt--)
    // {
    //     printf("%s\n",buffer);
    //     sleep(1);
    // }
    printf("%x\n",&g_val);
    return 0;
}
struct thread{
    pthread_t tid;
    char buffer[1024];
};
int main(){
    printf("%x\n",&g_val);
#define NUM 10
    vector<thread*> v(NUM);
    for(int i = 0 ; i < NUM;i++ ){
        v[i] = new thread;
        snprintf(v[i]->buffer,sizeof v[i]->buffer,"thread :%d",i);
        pthread_t tid = 0;
        pthread_create(&tid,nullptr,task,(void*)v[i]->buffer);
        //rintf("%x\n",tid);
        v[i]->tid = tid;
    }

    for(int i = 0 ; i < NUM; i++){
        pthread_join(v[i]->tid,nullptr);
        //printf("on sucess:%x\n",v[i]->tid);
        delete v[i];
    }

    return 0;
}